package com.crm.api.mapper;

import com.crm.api.entity.Customer;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 客户数据访问接口
 */
@Mapper
public interface CustomerMapper {

    /**
     * 查询客户列表（包含创建人等详细信息）
     */
    List<Map<String, Object>> findCustomersWithDetails(Map<String, Object> params);

    /**
     * 统计客户数量
     */
    Integer countCustomers(Map<String, Object> params);

    /**
     * 根据ID查询客户
     */
    Customer findById(Integer id);

    /**
     * 插入客户
     */
    void insert(Customer customer);

    /**
     * 更新客户
     */
    void update(Customer customer);

    /**
     * 根据ID删除客户
     */
    void deleteById(Integer id);

    /**
     * 查询客户列表（用于导出）
     */
    List<Customer> findCustomersForExport(Map<String, Object> params);

    /**
     * 获取最大客户编号
     */
    String getMaxCustomerCode();

    /**
     * 检查公司名称是否已存在
     */
    Integer existsByCompanyName(@Param("companyName") String companyName);

    /**
     * 检查公司名称是否已被其他记录使用
     */
    Integer existsByCompanyNameAndNotId(@Param("companyName") String companyName, @Param("id") Integer id);

    /**
     * 统计关联的业务数量
     */
    Integer countRelatedBusinesses(@Param("id") Integer id);

    /**
     * 统计关联的工单数量
     */
    Integer countRelatedWorkOrders(@Param("id") Integer id);

    /**
     * 获取客户总数
     */
    Integer getTotalCount();

    /**
     * 获取有效客户数量
     */
    Integer getActiveCount();

    /**
     * 获取无效客户数量
     */
    Integer getInactiveCount();

    /**
     * 获取等级统计
     */
    List<Map<String, Object>> getLevelStats();

    /**
     * 获取行业统计
     */
    List<Map<String, Object>> getIndustryStats();

    /**
     * 获取来源统计
     */
    List<Map<String, Object>> getSourceStats();

    /**
     * 获取省份统计
     */
    List<Map<String, Object>> getProvinceStats();

    /**
     * 获取月度新增统计
     */
    List<Map<String, Object>> getMonthlyStats();
}